oldfile=test.csv
read -p "Enter File location: "$savelocation1
read -p "Enter File name: " $newfile1
grep "foobar" $oldfile > $savelocation1/$newfile1
awk ' BEGIN {FS=","}
{
printf "%-5s %-10s" \n, $1, $3
} ' < $savelocation1/$newfile1
grepは行のみを含む新しいファイルを生成します$newfile
が、最初と3番目の列を印刷するためにawkを実行するときの問題は、awkの出力を書かずに結果を端末に印刷することです。"foobar"
$oldfile
$newfile1
$newfile1
編集 - 一時ファイルを使用して保存して出力し、元のファイルに転送します。しかし、何らかの理由で、これはawkステートメントではなくgrepでのみ機能します。
$savelocation1/$oldfile> $savelocation1/tempfile.csv && mv $savelocation1/tempfile.csv $savelocation1/$newfile
ベストアンサー1
GNU awkを使用している場合:
gawk -i inplace '...' filename # NOT redirected
moreutils
パッケージをインストールすると
awk '...' filename | sponge filename
一時ファイルを使用する(awkプロセスが正常に完了した場合にのみ元のファイルを上書きします)
t=$(mktemp)
awk '...' filename >"$t" && mv "$t" filename
しかし、ここでは別々のgrepとawkは必要ありません。
awk -F, -v pattern="foobar" '
$0 ~ pattern {
printf "%-5s %-10s\n", $1, $3
}
' $oldfile > $savelocation1/$newfile1