cat file.txt
20150101
2015010103
2015010106
201501010901
2015010112
20150101150130
2015010118
20150101210150
该文件包含YYYYMMDDHHMMSS格式的日期。它的长度是8,10,12,14。 我希望输出为
20150101000000
20150101030000
20150101060000
20150101090100
20150101120000
20150101150130
20150101180000
20150101210150
缺少HHMMSS,请输入000000 我试图逐行读取整个文件,如:
mapfile -s 0 -t strdate < file.txt
for pp in ${strdate[@]};do
if [ `echo ${#pp}` == 8 ]; then
newTime=$(( $pp*10000 ))
...
fi
done
任何直接的awk解决方案?
答案 0 :(得分:5)
您可以在awk中使用sprintf
:
awk '{s=sprintf("%-14s", $1); gsub(/ /, "0", s); print s}' file
20150101000000
20150101030000
20150101060000
20150101090100
20150101120000
20150101150130
20150101180000
20150101210150
或者printf
之后也可以使用:
awk '{printf "%-d%0" (14-length($1)) "s\n", $1, ""}' file
20150101000000
20150101030000
20150101060000
20150101090100
20150101120000
20150101150130
20150101180000
20150101210150
答案 1 :(得分:1)
这应该有效
awk '{while(length($0)<14)$0=$0 0}1' file
20150101000000
20150101030000
20150101060000
20150101090100
20150101120000
20150101150130
20150101180000
20150101210150
答案 2 :(得分:1)
awk '{i=length($0);while(i++<14)$0=$0"0"}1' File
<强>逻辑:强>
只要行长度小于0
,就会将14 (as per question)
附加到每一行,并打印每一行。
答案 3 :(得分:1)
使用coreutils
和bash
重定向,这是一种有趣的方式:
printf "%-14s\n" $(<file.txt) | tr ' ' 0
这假设file.txt
中没有多余的空格。
输出:
20150101000000
20150101030000
20150101060000
20150101090100
20150101120000
20150101150130
20150101180000
20150101210150
答案 4 :(得分:0)
您可以使用for循环:
~$ awk '{x=$0;for(i=length(x);i<14;i++)x=x"0";print x}' file.txt
20150101000000
20150101030000
20150101060000
20150101090100
20150101120000
20150101150130
20150101180000
20150101210150
length(string)
给出字符串中的字符数。如果string是数字,则它给出表示该数字的字符串的长度。
所以从数字的长度到14,连接&#34; 0&#34;到&#34;号码&#34;。
答案 5 :(得分:0)
使用Python:
$ cat file
20150101
2015010103
2015010106
201501010901
2015010112
20150101150130
2015010118
20150101210150
$ python -c $'import sys\nfor line in sys.stdin:\n\tprint "%.14s" % (line.rstrip() + "0"*14)' < file
20150101000000
20150101030000
20150101060000
20150101090100
20150101120000
20150101150130
20150101180000
20150101210150
说明:
上面的非单行形式的python脚本如下所示:
#!/usr/bin/env python
import sys
for line in sys.stdin:
print "%.14s" % (line.rstrip() + "0"*14)
sed
下的相同逻辑:
sed -r 's/$/00000000000000/;s/(.{14}).*/\1/' < file