Unix用分隔符分隔字符串行

时间:2013-07-19 11:27:19

标签: unix awk delimiter

我在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

1 个答案:

答案 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