String awk按字符索引打印substr(),忽略substr末尾的空格

String awk按字符索引打印substr(),忽略substr末尾的空格,string,bash,awk,String,Bash,Awk,我有这样的数据 12345678901234567890123456789012345678 // this line just character index // a0001 some text other_data_1 a0002 some_text_connected other_data_2 a0003 other_data_3 在每行的substr($0、7、20)中,都有一些文本。我可以用打印机打印便笺文本 awk '{

我有这样的数据

12345678901234567890123456789012345678 // this line just character index //
a0001 some text           other_data_1
a0002 some_text_connected other_data_2
a0003                     other_data_3
在每行的substr($0、7、20)中,都有一些文本。我可以用打印机打印便笺文本

awk '{print substr($0,7,20)}' testfile
并获得:

some text          
some_text_connected
(20 spaces here)                           
  • 如何删除每个substr结尾的空格($0,7,20)并打印文本

  • 如果substr($0,7,20)为空,是否改为打印N/a


  • 提前谢谢

    您可以调用
    sub
    删除所有尾随空格:

    awk '{s = substr($0,7,20); sub(/[[:blank:]]+$/, "", s); print (s == "" ? "NA" : s)}' file
    
    print(s==“”?“NA”:s)
    将在字符串
    s
    为空时打印
    NA
    ,否则打印
    s

    您可以尝试: 带着awk

    还是跟塞德一起

    sed -E 's/([^ ]* )(..*)/\2/;t;s/.*/NA/' testfile
    

    这是此列表中
    sub
    的下一个字符串函数:。祝你好运。不会有任何
    (这里有20个空格)
    -只有一行没有空格的空行确定这里可能有从7到26的字符索引中的空格,$2可能只能识别该范围内的部分文本,如示例数据的第二行。@edmorton你介意详细解释一下
    /[:blank:]+$/
    表示子字符串的尾随空格?谢谢@在
    sub
    函数中,regex
    [[:blank:][]+$
    检查
    substr
    函数后的尾随空格并将其删除。表达式
    print(s==“”?“NA”:s)
    如果字符串
    s
    为空,则打印
    NA
    ,否则打印字符串
    s
    sed -E 's/([^ ]* )(..*)/\2/;t;s/.*/NA/' testfile