如何将带有空格的文本打印为同一行

How to printf text with spaces as same line

我有这样的文本文件

B.10967 2020-09-09 12:01:58.913
B.10966 2020-09-09 12:01:51.670
B.10965 2020-09-09 12:01:24.070

然后我有一些 shell 循环脚本,然后是循环结果中的 printf

pathlastsfcola="/media/LastPatch.txt";
for codes in $(cat $pathlastsfcola | tr -d '\r')
do
   printf "${codes}\n"
done;

然后循环的结果是这样的

B.10967
2020-09-09
12:01:58.913
B.10966
2020-09-09 
12:01:51.670
B.10965 
2020-09-09 
12:01:24.070

我的预期结果还是这样

=================================
|code   | date time             |
=================================
|B.10967|2020-09-09 12:01:58.913|
|B.10966|2020-09-09 12:01:51.670|
|B.10965|2020-09-09 12:01:24.070|
=================================

如何打印每个数据以空格作为分隔符

您需要做的只是引用您的变量,如下所示。所发生的一切只是 $pathlastsfcola 变成了 "$pathlastsfcola"

for codes in "$pathlastsfcola"
do
   printf "${codes}\n"
done;

查看此处的解释:

https://tldp.org/LDP/abs/html/quotingvar.html

你可以试试这样的

input="/media/LastPatch.txt"
while IFS= read -r line
do
  printf "$line\n"
done < "$input"

我在 ubuntu 上试过了,效果很好

我从这里得到了这个例子:https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/

能否请您尝试以下,在所示示例中使用 GNU awk 编写测试。

awk -v header_footer="=================================" '
BEGIN{
  OFS="|"
  print header_footer ORS "|code   | date time             |"
}
{
  print "",substr([=10=],1,length()),substr([=10=],length()+2),""
}
END{
  print header_footer
}' Input_file

输出如下。

=================================
|code   | date time             |
|B.10967|2020-09-09 12:01:58.913|
|B.10966|2020-09-09 12:01:51.670|
|B.10965|2020-09-09 12:01:24.070|
=================================