AWK如何从文件中读取一行并使用子字符串获取一些值

时间:2012-12-11 20:43:02

标签: shell unix awk

我是AWK的新手。 你能告诉我如何使用awk从文件中读取一行吗?如何使用读取行中的子字符串函数获取值并将其存储到变量中?例如,这里是数据集:

01 001   410070300186169                 359829047319420
01 002   410070234186169                 359829043245420
01 001   410070234186169                 359829047319420

我想检查位置4到6,值是否为“001”,然后将数据写入文件file_1,如果值为“002”,则将数据写入文件file_2。

3 个答案:

答案 0 :(得分:2)

你走了;你可以将这一切都放在一行,但为了便于阅读,我将其分解为多个:

awk '$2=="001" {print > "file_1"}
     $2=="002" {print > "file_2"}' input_file

<强>解释

  • awk默认情况下使用空格和制表符将每行分隔为字段作为分隔符,因此对于每行读取,第二列中的值将保存在$2
  • $2=="001" {print > "file_1"}:如果$2001,请将整行打印到file_1
  • $2=="002" {print > "file_2"}:同样适用于002

答案 1 :(得分:1)

你可以在awk 1班轮中做到这一切:

awk '$2 == "001" {print > "file_1"} $2 == "002" {print > "file_2"}' infile

答案 2 :(得分:0)

你可以用

读入$ 0
getline <file

然后你可以使用

 substr($0, 1 , 5)

从索引1开始获取$ 0的子字符串,长度为5