GNU/Linux >> Linux の 問題 >  >> Linux

2 つのファイルを 1 行ずつ一貫してマージする方法

この Perl ワンライナーは、必要な名前変更を表示します:

perl -e 'open $f[$_-1], "file$_.txt" for 1,2; print "rename @n\n" while chomp(@n = map ''.<$_>, @f)'

これが機能する場合は、 print を置き換えます 実際の名前変更と使用を含むステートメント

perl -e 'open $f[$_-1], "file$_.txt" for 1,2; rename @n while chomp(@n = map ''.<$_>, @f)'

実際の名前変更を行います。


paste を使用できます ファイルを並べてフォーマットするには:

$ paste -d" " file1.txt file2.txt
/etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0
/etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0
/etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0
/etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0
/etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0

例:

$ paste -d" " file1.txt file2.txt | while read from to; do echo mv "${from}" "${to}"; done
mv /etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0
mv /etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0
mv /etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0
mv /etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0
mv /etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0

もちろん、いくつかの安全チェック ([ -f "${from}" ] 、...).

免責事項:ファイル名にスペースが含まれていない場合にのみ機能します。


paste -d " " file1.txt file2.txt

この仕事には最適です。

ただし、Windows 環境でテキスト ファイルを処理し、GNU ペーストを使用する場合は、必ずファイルを Unix 形式 (CR) に変換し、(CR-LF) のファイルを使用しないでください。

GNU ペーストは DOS フォーマットを適切に処理していないようで、解析は予測できません。予想される出力は、警告なしで不規則で予期しないものです。

gVim を使用して簡単に変換できます (メニュー 編集ファイル設定ファイル形式 ).


Linux
  1. 2つのファイルを区切り文字のトリプルパイプ記号「|||」で1行ずつマージしますか?

  2. 2 つの tarball のコンテンツを比較する方法

  3. AWK を使用して 2 つのファイルをマージする方法は?

  1. diff を使用して 2 つのファイルを手動でマージする

  2. 2 つの HTML ファイルをマスター HTML ファイルにマージする

  3. 2 つの CSV ファイルを結合するには?

  1. Linuxで2つのテキストファイルを結合する方法

  2. 2つのファイルを2つの列に印刷しますか?

  3. 2 つの ar 静的ライブラリを 1 つにマージする方法は?