【问题标题】:Change the way AWK read file改变AWK读取文件的方式
【发布时间】:2024-05-21 01:55:02
【问题描述】:

任何人都可以帮助我实现这一点,通常是 AWK 读取文件

a b c

作为

$1:a
$2:b
$3:c

如何读取这个文件

a
b
c

作为

$1:a
$2:b
$3:c

非常感谢您的帮助。

【问题讨论】:

    标签: linux bash shell awk


    【解决方案1】:

    您可以取消设置记录分隔符并将输入字段分隔符更改为换行符:

    $ awk -F'\n' -vRS='' '{print $1,$2,$3}' file
    a b c
    

    【讨论】:

    • 谢谢你,你能帮我解决剩下的问题吗
    • 没问题。我认为您应该单独提出第二个问题,因为有一些方法可以解决与原始问题无关的问题。如果您认为有办法使用此答案,您应该自己尝试一下,如果遇到困难,请在新问题中展示您的努力。
    【解决方案2】:

    将 GNU awk 用于多字符 RS:

    $ cat file
    a
    b
    c
    
    d
    
    $ awk -v RS='^$' '{for (i=1;i<=NF;i++) print "$"i"="$i; print "----"}' file
    $1=a
    $2=b
    $3=c
    $4=d
    ----
    

    注意 d 与 Tom 将 RS 设置为 NULL 字符串的解决方案的区别:

    $ awk -F'\n' -v RS='' '{for (i=1;i<=NF;i++) print "$"i"="$i; print "----"}' file
    $1=a
    $2=b
    $3=c
    ----
    $1=d
    ----
    

    考虑一下如果文件中有空行,您希望脚本的行为方式。

    【讨论】: