2

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

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

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

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

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

4

2 回答 2

5

采用cut -c

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

您也可以使用以下内容:

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

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

您的解决方案将是:

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

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

于 2012-07-23T07:00:04.917 回答
0

您也可以使用sed

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

解释:

  • -n不打印行
  • 替换_
  • 1只有第一行
  • .{11}省略 11 个字符
  • (.{7})保存 7 个字符(字符 12-18)
  • .{2}省略 2 个字符 (19-20)
  • (.{8})保存 8 个字符 (21-28)
  • \1\2用第一次和第二次保存替换字符串
  • p打印指定行的行
于 2012-07-23T08:33:23.977 回答