Jim*_*imS 1 bash shell awk date
所以我有一个文件,每一行都有一些信息和日期(生日)。我想在给定日期之后打印带有日期的行。我使用这个 awk 命令
awk -F '|' 'FNR>1 $dateA<=$5 {print $1" "$2" "$3" "$4" "$5" "$6" "$7" "$8}' $FILE
Run Code Online (Sandbox Code Playgroud)
但它不能正常工作(打印所有文件行)。日期采用 YYYY-MM-DD 格式,因此字母顺序也是按时间顺序排列的。
编辑:输入文件中的一些行
1099511628908|Chen|Wei|female|1985-08-02|2010-05-24T20:52:26.582+0000|27.98.244.108|Firefox
1099511633435|Smith|Jack|male|1981-04-19|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511635042|Kiss|Gyorgy|male|1984-09-14|2010-05-16T22:57:41.808+0000|91.137.244.86|Chrome
1099511635218|Law-Yone|Eric|male|1987-01-20|2010-05-26T20:10:22.515+0000|203.81.95.235|Chrome
1099511638444|Jasani|Chris|female|1981-05-22|2010-04-29T20:50:40.375+0000|196.223.11.62|Firefox
2199023256615|Arbelaez|Gustavo|male|1986-11-02|2010-07-17T18:53:47.633+0000|190.96.218.101|Chrome
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,单引号中的变量不会被 shell 扩展。awk 将看到变量的名称,而不是它的值。
一种可能的解决方案是这样做(假设比较字符串是正确的):
dateA='1985-01-01'
infile='file to read values from'
awk -F '|' -v dateA="$dateA" '{if (FNR>1 && dateA<=$5) {print}}' "$infile"
Run Code Online (Sandbox Code Playgroud)
一个更惯用的解决方案(不太清楚):
awk 'FNR>1 && dateA<=$5' FS='|' dateA="$dateA" "$infile"
Run Code Online (Sandbox Code Playgroud)
或者(是的,需要所有引用):
awk 'FNR>1 && "'"$dateA"'"<=$5' FS='|' "$infile"
Run Code Online (Sandbox Code Playgroud)
但在考虑使用此选项之前,请阅读有关代码注入的内容。
| 归档时间: |
|
| 查看次数: |
12443 次 |
| 最近记录: |