ファイルテキストをファイル名とマージする

ファイルテキストをファイル名とマージする

2つのテキストファイルがあります。最初の「file1.txt」の内容は次のとおりです。

Apple
Orange
Banana

2番目のファイル「file2.txt」の内容は次のとおりです。

monday
tuesday
wednesday

私はそれらを1つのファイルに結合したいと思います。結果は次のとおりです。

Apple       File1.txt
Orange      File1.txt
Banana      File1.txt
monday      File2.txt
tuesday     File2.txt
wednesday   File2.txt

答え1

これは非常に些細なことですawk

$ awk '{print $0,FILENAME}' File*.txt
Apple File1.txt
Orange File1.txt
Banana File1.txt
monday File2.txt
tuesday File2.txt
wednesday File2.txt

入力行とファイル名の間にスペースの代わりにタブが必要な場合は、-v OFS='\t'コマンドラインに追加して出力フィールド区切り記号(OFS)を設定します。

awk -v OFS='\t' '{print $0,FILENAME}' File*.txt

または以下を使用してください。

awk '{print $0 "\t" FILENAME}' File*.txt

ファイル名に=文字がないとします。ファイル名に文字が含まれていないことを保証できない場合は、=次のように変更できます。

awk '{print $0 "\t" substr(FILENAME, 3)}' ./File*.txt

少なくともGNUでは、ファイル名に有効な文字を形成しないバイトが含まれていると警告が表示されますが((使用awkロケールCLC_ALL=C awk...

答え2

そしてperl

perl -lpe '$_ .= "\t$ARGV"' File*.txt

File*.txt(しかし、次のようなグローブを使用すると、トリックを実行できます。他は危険かもしれません)。

答え3

コマンドラインで対話的に使用するための最も簡単な入力の1つは次のとおりです。

grep . File*.txt

正規表現は.すべての文字と一致するため、すべてのファイルの空でないすべての行が一致し、ファイル名がプレフィックスとして印刷されます。

特定のカーネル設定の確認(ファイルごとに1つの設定が保存されます)などのユースケースに適しています。

$ grep . /sys/kernel/mm/transparent_hugepage/*
/sys/kernel/mm/transparent_hugepage/defrag:[always] defer defer+madvise madvise never
/sys/kernel/mm/transparent_hugepage/enabled:[always] madvise never
/sys/kernel/mm/transparent_hugepage/hpage_pmd_size:2097152
grep: /sys/kernel/mm/transparent_hugepage/khugepaged: Is a directory
/sys/kernel/mm/transparent_hugepage/shmem_enabled:always [within_size] advise never deny force
/sys/kernel/mm/transparent_hugepage/use_zero_page:1

関連情報