变量赋值在rhel6 linux中不起作用

时间:2016-03-31 09:26:38

标签: linux shell

文件1

ABY37499|ANK37528|DEL37508|SRILANKA|195203230000|445500759
ARJU7499|CHA38008|DEL37508|SRILANKA|195203230000|445500759
IB1704174|ANK37528|DEL37508|SRILANKA|195203230000|445500759
IB1704174|CHA38008|DEL37508|SRILANKA|195203230000|445500759
ABY37500|ANK37529|DEL37509|BRAZIL|195203240000|445500757
ARJU7500|CHA38009|DEL37509|BRAZIL|195203240000|445500757
IB1704175|ANK37529|DEL37509|BRAZIL|195203240000|445500757

我想将第五列日期转换为

下面的另一个格式脚本
#!/bin/sh
dt="%Y-%m-%d %H:%M"
awk -F '|' '{print $5}' file1 | sed 's/.\{8\}/& /g'> f1.txt
aa=`(date -f f1.txt +"$dt")`
echo "$aa"
awk -F '|' '$5=$aa' file1
回声" $ aa"得到了所需的输出,但我不能分配$ aa到$ 5请帮助我。 感谢

3 个答案:

答案 0 :(得分:0)

我在Etan Reisner的评论之后纠正了我的回答

来自AWK男子:

  

输入以称为记录的单位读取,并由规则处理   你的程序一次一条记录。默认情况下,每条记录都是一条   线。每条记录都会自动拆分为称为字段的块。   这使程序更方便地处理a的各个部分   记录。

字段存储在变量$1, $2, ...

  

awk看到的字段内容可以在awk中更改   程序;这会改变awk认为当前输入记录的内容。

查看该人page

因此,这个表达式:

awk -F '|' '$5=$aa' file1

没有替代 file1 的第五列的效果。

您必须将修改后的输出写入第二个文件。

答案 1 :(得分:0)

可能这可以帮助你sed

echo 195203240000 | sed -n -e "s_\(....\)\(..\)\(..\)\(..\)\(..\)_\1-\2-\3 \4:\5_p"

1952-03-24 00:00

答案 2 :(得分:0)

这个awk脚本应该做你想要的。

它并不完全漂亮,但假设输入格式一致,它可以正常工作。

awk '{$5=sprintf("%s-%s-%s %s:%s\n",
      substr($5,1,4), substr($5,5,2), substr($5,7,2),
      substr($5,9,2), substr($5,11,2))} 7' file1 > file1.new

它会将字段的新值分配给$5,然后使用7(作为真值y)来获取默认的awk {print}操作以打印修改后的行。