【发布时间】:2015-10-05 02:14:19
【问题描述】:
我正在查看这个问题:Bash - Take nth column in a text file
我想创建一个写入文本文件的函数,然后我可以使用上述方法对其进行解析。因此,例如,我希望我的函数在第一列中写入“日期”,在第二列中写入“ID”,在第三列中写入“地址”。然后,一旦我有了这个,例如,用户可以通过查询第二列来查看文件中是否存在某个 ID,然后查看那里的每个项目。用户可以使用上述问题中讨论的方法来执行此操作。
什么定义了列?它只是一个空格分隔符吗?是标签吗?
如果我想按上述方式输出此信息,我写入文件的方法会是什么样子?到目前为止,我有:
cat "$DATE $ID $ADDRESS \n" > myfile.data
【问题讨论】:
-
awk 不是 bash,awk 关于什么是或不是列的想法与 bash 无关。如果您从 C 程序、Python 程序或任何其他非 shell 程序中调用列,awk 对列的概念仍然相同。
-
因此,这个问题应该询问有关 bash 的问题,或者应该询问有关 awk 的问题,但不应将这两个主题混为一谈,似乎同时询问两者。
-
顺便说一句,
cat "$DATE $ID $ADDRESS \n"试图读取一个由$DATE $ID $ADDRESS \n扩展命名的文件;当然,这不是你想要的。 -
(另外,你不应该在shell脚本中使用全大写的变量名;shell变量与环境变量共享一个命名空间,环境变量名的指导见@987654322第四段@)
-
要明确术语:bash 中没有列,awk 中也没有。在 bash 和 awk 中都有 FIELDS,这就是为什么 bash 有输入字段分隔符 (
IFS) 变量而 awk 有输入(这次小 i 不是变量名的一部分)字段分隔符 (FS)和输出字段分隔符 (OFS)。顺便说一句,不要在您引用的问题中使用公认的答案,因为其中的 bash 和 shell 解决方案都是完全错误的。