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
ロケールC
LC_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