首页 > 解决方案 > 如何一次性有效地将多列数据附加到制表符分隔文件

问题描述

到目前为止,我已经想出了如何只添加一列。我还有两列。我在这里简化了我的代码,但实际上我将列作为变量从另一个文件中获取,我有 100 个这样的文件,每个 50 MB,我应该添加这些列。

这是输入文件

1|True
2|Fals

我希望输出是

1|True|2018-05-10|2018-05-11|2018-05-12
2|Fals|2018-05-10|2018-05-11|2018-05-12

我写了这个

sed -i "s/.$/|2018-05-10/" $file 

标签: unixsed

解决方案


编辑:根据 OP 日期不是系统日期,它们是变量,然后添加以下内容。

awk -v var_1=$(var1) -v var_2=$(var2) -v var_3=$(var3) '{print $0 OFS var_1 OFS var_2 OFS var_3}' OFS="|"   Input_file

其中var_1,var_2var_3awk变量,var1,var2var3是 bash 变量。


使用 GNU date,以下可能对您有所帮助。

awk -v today=$(date +%Y-%m-%d) -v tomorrow=$(date +%Y-%m-%d --date="+ 1 day") -v day_after=$(date +%Y-%m-%d --date="+ 2 day") '{print $0 OFS today OFS tomorrow OFS day_after}' OFS="|"   Input_file

现在也添加非单线形式的解决方案。

awk -v today=$(date +%Y-%m-%d) -v tomorrow=$(date +%Y-%m-%d --date="+ 1 day") -v day_after=$(date +%Y-%m-%d --date="+ 2 day") '
{
  print $0 OFS today OFS tomorrow OFS day_after
}
' OFS="|"   Input_file

如果将更改保存到 Input_file 本身也附加> temp_file && mv temp_file Input_file到上面的代码中。


推荐阅读