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

タブ区切りファイルに値の列を追加する

次のようなワンライナー ループを使用できます。

for f in file1 file2 file3; do sed -i "s/$/\t$f/" $f; done

リスト内の各ファイルに対して、これは sed を使用します 各行の末尾にタブとファイル名を追加します。

説明:

  • -i の使用 sed のフラグ その場で置換を実行し、ファイルを上書きする
  • s/PATTERN/REPLACEMENT/ で置換を実行します .この例では、PATTERN は $ です 、行の終わり、および REPLACEMENT は \t です (=タブ)、および $f ループ変数からのファイル名です。 s/// シェルが変数を展開できるように、コマンドは二重引用符で囲みます。

paste があるのに、これらの強力なツールをお勧めする理由を教えてください。 コマンド!

$ cat a
A
B
C
D
$ cat b
1
2
3
4
$ paste a b
A   1
B   2
C   3
D   4

ちょっとしたトリックで、 paste を使用できます OPの目的のために。ただし、インプレースのファイルは置き換えられません:

for f in file1 file2 file3; do 
    paste $f <(yes $f | head -n $(cat $f | wc -l)) > $f.new
done

これにより、各ファイルの最後の列としてそれぞれのファイル名が新しいファイル filename.new に貼り付けられます


awk を使用できます :

awk '{print $0, FILENAME}' file1 file2 file3 ...

Linux
  1. コマンド出力またはファイルの内容を列形式で表示する

  2. Lum –最初の列に従って2つのファイルの共通の値を置き換えますか?

  3. スワップボリュームを追加しますか?

  1. タブ区切りファイルのソート

  2. ELF ファイルへのセクションの追加

  3. Linuxシェルは、2番目の列に従ってファイルをソートしますか?

  1. データファイルで一意の値を見つける

  2. Vim が改行を追加するのはなぜですか?これはコンベンションですか?

  3. awk を使用して、別の列の値に基づいて列の値を合計する