我在txt文件中有几行字符串,如下所示:
input.txt中 - >
abc;def;ghi jklm;mno pqr;
abcde;fgh;ijk lmno;pqrs tuv;
我的代码就是这个。它不适用于太空。 请帮忙。
awk -F";" '{print $1,$2,$3,$4}' input.txt | while read var1
var2 var3 var4
Do
echo 'var1 = ' $var1
echo 'var2 = ' $var2
echo 'var3 = ' $var3
echo 'var4 = ' $var4
Done
所需的输出 - >
var1 = abc
var2 = def
var3 = ghi jklm
var4 = mno pqr
var1 =abcde
var2 =fgh
var3 =ijk lmno
var4 =pqrs tuv
答案 0 :(得分:4)
这可以做到:
while IFS=';' read -r val1 val2 val3 val4
do
echo "val1 = $val1"
echo "val2 = $val2"
echo "val3 = $val3"
echo "val4 = $val4"
done < input.txt
要考虑的基本方面是IFS=";"
,它定义了输入字段分隔符。使用read -r val1 .. val4
,我们指出将定义哪些变量。
使用awk
:
$ awk -F";" '{for (i=1; i<NF; i++) {print "val"i,"=",$i}}' input.txt
它基本上将;
定义为-F ";"
的字段分隔符。然后使用for i
遍历所有这些字段并打印它们。 NF
表示字段数,循环最多为NF-1
,因此不会显示最后一个空字段。 Thanks JS웃 for the tip :)
$ while IFS=';' read -r val1 val2 val3 val4; do echo "val1 = $val1"; echo "val2 = $val2"; echo "val3 = $val3"; echo "val4 = $val4"; echo; done < a
val1 = abc
val2 = def
val3 = ghi jklm
val4 = mno pqr
val1 = abcde
val2 = fgh
val3 = ijk lmno
val4 = pqrs tuv
awk
版本:
$ awk -F";" '{for (i=1; i<NF; i++) {print "val"i,"=",$i}}' a
val1 = abc
val2 = def
val3 = ghi jklm
val4 = mno pqr
val1 = abcde
val2 = fgh
val3 = ijk lmno
val4 = pqrs tuv