如何阅读具体的行和具体位置?

时间:2012-07-23 06:57:03

标签: file bash shell unix solaris

我在特定行和特定位置读取字符串时遇到问题。我有一个输入文件,每个行中的每个值都有一个固定的位置和固定的长度。这是我输入文件的一个示例:

sltele     Hoodie   24051988 d12Hdq
sltele     Hoodie   07051987 d30Hdq
sltele     Hoodie   07082011 d08Hdq
sltele     Hoodie   09081961 d04Hdq
sltele     Hoodie   20041962 d14Hdq
sltele     Hoodie   20032000 d01Hdq
sltele     Hoodie   13062002 d05Hdq

我需要在第一行的第三列中读取一个字符串。所以,我用了这个

awk 'NR==1 {print $2, $3}' inputfile.inp

如何以字符位置作为参数获得精确结果? (12日至18日和21日至28日)

2 个答案:

答案 0 :(得分:4)

使用cut -c

查看手册页以获取更多详细信息。

您也可以使用以下内容:

echo "abcdefghij" | awk '{print substr($0,2,2),substr($0,6,2)}'
bc fg

上面是第二个位置的2个字符和第6个位置的2个字符。

您的解决方案将是:

awk 'NR==1 {print substr($0,12,6),substr($0,21,7)}' inputfile.inp

上面的命令将从第12位获得6个字符,从第1行第21位获得7个字符。

答案 1 :(得分:0)

您也可以使用 sed

sed -rn "1 s@.{11}(.{7}).{2}(.{8})@\1\2@p" filename

说明:

  • -n 不打印行
  • s 替换
  • 1 仅限第一行
  • 。{11} 省略11个字符
  • (。{7})保存7个字符(字符12-18)
  • 。{2} 省略2个字符(19-20)
  • (。{8})保存8个字符(21-28)
  • \ 1 \ 2 用第一次和第二次保存替换字符串
  • p 打印指定行