我有一個腳本,可以為目錄中的每個檔案使用 awk 命令執行某些操作。
為此,我使用了 for 回圈,但我希望為檔案運行的每個 awk 命令都將我的輸出重定向到一個檔案。像 1 個源檔案 -> 1 個目標檔案。
目前,我的外殼設定如下:
#!/bin/bash
FILES="/home/yha/AG2R/*"
for f in $FILES
do
echo "Processing $f file..";
awk -F ';' '$1=="TABLE" && $3=="" {printf "01 %s.\n\n", $2; next} {sub(/CHAR/,"PIC X", $2);printf " * %s.\n\n 05 %s %s.\n\n", $3, $1, $2;}' $f > temp.cpy
done
如您所見,我將輸出重定向到“temp.cpy”中,但他不僅只給我目錄輸出的最后一個檔案,即使他將我所有的檔案轉換都放在該檔案中,這不是我想要的,因為我一開始就描述了。我還想重定向特定檔案夾中的輸出
uj5u.com熱心網友回復:
使輸出檔案依賴于$f.
#!/bin/bash
FILES="/home/yha/AG2R/*"
target_dir=/home/yha/AG2R/COPY
for f in $FILES
do
echo "Processing $f file..";
base=$(basename "$f")
awk -F ';' '$1=="TABLE" && $3=="" {printf "01 %s.\n\n", $2; next} {sub(/CHAR/,"PIC X", $2);printf " * %s.\n\n 05 %s %s.\n\n", $3, $1, $2;}' "$f" > "$target_dir/$base"
done
uj5u.com熱心網友回復:
awk 可以自己做到這一點:
awk -F ';' '
FNR == 1 {
printf "Processing %s file..\n", FILENAME
output = FILENAME ".out"
}
$1 == "TABLE" && $3 == "" {
printf "01 %s.\n\n", $2 > output
next
}
{
sub(/CHAR/,"PIC X", $2)
printf " * %s.\n\n 05 %s %s.\n\n", $3, $1, $2 > output
}
' /home/yha/AG2R/*
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383853.html
上一篇:將awk中的行逐行提取到檔案
下一篇:僅更改bash腳本中第一行的輸出
