【问题标题】:How to read specific line and specific position?如何读取特定行和特定位置?
【发布时间】:2012-07-21 09:46:09
【问题描述】:

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

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 日)

【问题讨论】:

    标签: file bash shell unix solaris


    【解决方案1】:

    使用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 个字符。

    【讨论】:

    • 谢谢彼得 :) 这就是我想要的解决方案。再次感谢你:)
    【解决方案2】:

    你也可以使用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 打印指定行的行

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      相关资源
      最近更新 更多