gpt4 book ai didi

bash - 什么在 bash 中定义 "column"?在 awk 中?

转载 作者:行者123 更新时间:2023-11-29 09:18:13 25 4
gpt4 key购买 nike

我正在查看这个问题:Bash - Take nth column in a text file

我想制作一个写入文本文件的函数,然后我可以使用上述方法对其进行解析。因此,例如,我希望我的函数在第一列中写入“日期”,在第二列中写入“ID”,在第三列中写入“地址”。然后,一旦我有了这个,用户就可以,例如,通过查询第二列,然后查看那里的每个项目,来查看文件中是否存在某个 ID。用户可以使用上述问题中讨论的方法来执行此操作。

什么定义了列?它只是一个空格分隔符吗?是标签吗?

如果我想如上所述输出这些信息,我写入文件的方法应该是什么样的?到目前为止,我有:

cat "$DATE $ID $ADDRESS \n" > myfile.data

最佳答案

bash 中,与 awk 不同,列由 IFS 中的字符分隔.

也就是说,如果你设置:

IFS=$'\t'

...然后是 bash 内置函数所理解的列,例如 read first second rest , 将由制表符分隔。在输出端,printf '%s\n' "${array[*]}"将打印数组中的项目 arrayIFS 的第一个字符分隔.

默认值IFS相当于$' \t\n' -- 即空格、制表符和换行符。


要用您选择的分隔符编写一个文件,并且(大概)不止一行(将 while read 替换为您实际获取数据的方式,或者仅在循环内部使用只写一行):

while read -r date id address; do
printf '%s\t' "$date" "$id" "$address" >&3; printf '\n' >&3
done 3>filename

...或者,如果您不想要上面留下的尾随制表符:

IFS=$'\t' # use a tab as the field separator for output
while IFS=$' \t\n' read -r date id address; do
entry=( "$date" "$id" "$address" )
printf '%s\n' "${entry[*]}" >&3
done 3>filename

3>filename在循环外部比 >>filename 效率在每一行上,每写入一行重新打开一次输出文件。

关于bash - 什么在 bash 中定义 "column"?在 awk 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31440559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com