複数のファイル名を含むリストがあります。
file1
file2
次のように、各ファイルの最初の行の末尾にファイル名を追加したいと思います。
ファイル1の最初の行は次のようになります。
> ATCGCCfile1
ファイル2の最初の行は次のとおりです。
> ATTTCCfile2
私の現在のアイデアは、ファイル名で変数aを作成することです。
a="file1 file2"
ファイルを繰り返してインデックスを呼び出す単語を追加します。
for i in $a; do cat $i | awk '{print $0"$i"}' > $i.extended_word.txt; done
ただし、出力ではawk '{print $0"$i"}'
機能しません。最初のファイルと同様に、ファイル名なしで$ iのみが提供されます>ATCGCC$i
。
私は何が間違っていましたか?私もawk '{print $0"${i}"}'
成功せずに括弧()を試しました。
ベストアンサー1
リストを保存するには配列が必要です。
a=(
file1
file2
'other file with spaces'
$'even with\nnewlines'
)
awk -- '
FNR == 1 {
close(out)
$0 = $0 FILENAME
out = FILENAME".extended_word.txt"
}
{print > out}' "${a[@]}"
ファイル名に文字が含まれている場合は、残りが有効な変数ではないことを=
確認する必要があります。たとえば、ファイルがある場合。=
awk
file=1
./file=1
GNUの場合、awk
回避策は次のように書くことです。
gawk -e '
FNR == 1 {$0 = $0 FILENAME}
{print > FILENAME ".extended_word.txt"}
' -E /dev/null "${a[@]}"
これはパスに.があるファイルでも機能します=
が、残念ながら名前があります-
。