input.txt:
/usr/dir1/file1
/usr/dir1/file2
/usr/dir2/file4
/usr/dir3/file5
Script:
cat input.txt |while read FILENAME
do
nawk '{print $1}' ${FILENAME} >> output.txt
done
Expected output:
all column1 values of input files
Error:
nawk: can't open file
This works fine when i run it like this
nawk '{print $1}' /usr/dir1/file1 >> output.txt
nawk '{print $1}' /usr/dir1/file2 >> output.txt
nawk '{print $1}' /usr/dir2/file4 >> output.txt
whileループまたはif $? = 0(リターンコードを使用)ループを使用して実行できるようにしたいです。これを行う方法についてのアイデアはありますか?私はSolaris 5.10、KSHを使用しています。
答え1
入力ファイルを読み取りコマンドにパイプすると、災害が発生し、場合によっては機能しますが、多くの場合は機能しません。これを行うより一貫した方法を学ぶことをお勧めします。
以下はいくつかの簡単な選択肢です。
nawk '{print $1}' $( cat input.txt ) > output.txt
または繰り返したい場合...
for FILENAME in $( cat input.txt ); do
nawk '{ print $1 }' $FILENAME >> output.txt
done
これらの方法の利点は、フレーズを簡単に変更できることです。
$( cat input.txt )
..#記号の後にあるコメントを削除することで、ファイルリストにコメントを追加できます。例えば
$( cat input.txt | sed 's/#.*//' )
ノート:スペースやタブを含むファイルパスを満たす必要がある場合は、bashをスキップしてperl、pythonなどのテキスト/トークンベースのスクリプト言語を使用しないことをお勧めします。