因程序而改變列的值我有一個這樣的輸入:在Unix中
12 abc 13 14
13 def 14 15
1 lce 22 14
而且我想通過應用程序./program
第二列來改變它:
12 P1 13 14
13 P2 14 15
1 P3 22 13
(如果echo "abc" | ./program
返回「P1」,echo "def" | ./program
返回「P2」等)。我該怎麼做?
因程序而改變列的值我有一個這樣的輸入:在Unix中
12 abc 13 14
13 def 14 15
1 lce 22 14
而且我想通過應用程序./program
第二列來改變它:
12 P1 13 14
13 P2 14 15
1 P3 22 13
(如果echo "abc" | ./program
返回「P1」,echo "def" | ./program
返回「P2」等)。我該怎麼做?
使用while循環讀取:
while read -r one two rest
do
echo "$one $(./program <<< "$two") $rest"
done < inputfile
while read a b c d ; do echo $a $(./program <<< $b) $c $d ; done < t
其中t
是文件的名稱。
我認爲最簡單的方法是使用while循環。
while read -r line; do
old="$(echo "$line" | tr -s ' ' | cut -d ' ' -f 2)"
new="$(echo "$old" | ./program)"
echo "$line" | sed "s/$old/$new/"
done
備註:
tr
因爲你可能列對齊。 tr -s ' '
將多個空格替換爲一。這應該做你想要什麼作爲awk腳本
{
"echo "$2" | ./program" | getline result;
$2 = result;
print;
}
至於:如果echo "abc" | ./program
返回 「P1」,echo "def" | ./program
返回 「P2」 等)。我該怎麼做?
的程序腳本可能看起來像:
INFILE=input.txt ## your input file
## exits if no standard input
if [ -t 0 ] ; then echo "Error: No STDIN" && exit ; fi
## do something
while read line; do
awk -v input=$line '$2 == input {print "P"NR}' $INFILE
done
INFILE
後...echo "abc" | sh program
返回 「P1」echo "def" | sh program
回報「 P2「鑑於:如果你只是想輸出爲
12 P1 13 14
13 P2 14 15
1 P3 22 13
您可以使用下面的一行代碼:
awk 'BEGIN {OFS="\t"} {$2="P"NR}1' input.txt > outfile.txt
爲什麼不把所有的awk
,你需要該程序」?
awk 'BEGIN {n=split("abc def lce",q," ");for (i=1;i<=n;i++) d[q[i]]="P"i} {sub($2,d[$2])}8' file
12 P1 13 14
13 P2 14 15
1 P3 22 14
它是如何工作
awk '
BEGIN { # Begin block
n=split("abc def lce",q," ") # split the list of data in to array "q" and set "n" to number of elements
for (i=1;i<=n;i++) # loop trough all elements
d[q[i]]="P"i # assing P1, P2 etc to first, second element "d[abc]=P1" etc
}
{sub($2,d[$2])} # change filed 2 to new element
8 # print the new line
' file # input file
如果有 「P」 的數據表是不是續集,你可以添加它就像其他表:
awk 'BEGIN {n=split("abc def lce",q," ");split("P2 Q4 A3",r," ");for (i=1;i<=n;i++) d[q[i]]=r[i];print d["def"]}'
的'awk'解決方案不好。 OP喜歡在外部腳本中查找值並替換文件中的值,而不僅僅是數字。 – Jotne
對不起,你能澄清一下你的意思嗎? ...哦,你的意思是「程序」腳本已經寫好了..? – csiu
他喜歡根據存儲在他的程序中的表格將某些文本更改爲其他文本。 Eks如果「qwr」更改爲「P84AA」,而不僅僅是一個計數號碼, – Jotne