首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash如何将循环输出打印到一行?

bash如何将循环输出打印到一行?
EN

Stack Overflow用户
提问于 2012-02-29 06:11:42
回答 6查看 4.9K关注 0票数 3

我希望如果有人能帮我,

如何将for循环的输出打印到单行?

代码语言:javascript
运行
复制
for i in `cat file.csv`
do
echo $i 
done

我在这里尝试实现的是从file.csv获取一个数字列表,以生成一条mysql批量删除语句。

代码语言:javascript
运行
复制
delete FROM Recordtable WHERE DataID IN ('93041', '93031' ...etc);

这里的目标是将每1000条记录加载到一条delete语句中

非常感谢您的帮助

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-02-29 06:12:58

如果你想要循环,你可以使用

代码语言:javascript
运行
复制
for i in ($<file.csv)
do
  echo -n "$i "
done

echo-n选项会取消换行符。

您可以使用echo $(<file.csv)在一行中打印整个文件。

但这可能更适合您的需求:

代码语言:javascript
运行
复制
awk '{ printf $0 " " } NR%1000 == 0 { print "" }' file

这将打印每一行,后跟一个空格。只要行号可以被1000整除,它就会打印一个换行符;也就是说,在每1000行之后。

添加:要打印括号中的每一行,您可以使用

代码语言:javascript
运行
复制
awk '{ printf $0 " " } NR%1000 == 0 { print "" }' file | sed 's/.*/(&)/'

sed命令搜索任何字符(.*),并将它们替换为open-paren、找到的字符(即整行)和close-paren。

票数 5
EN

Stack Overflow用户

发布于 2012-02-29 06:32:05

看起来file.csv在单个列中包含了DataID。如果这是真的,您可以像这样生成查询,

代码语言:javascript
运行
复制
echo delete FROM Recordtable WHERE DataID IN \(0$(cat file.csv | tr -cs '[:digit:]' ',')0\)\;

因为文件只包含整数(DataID看起来是整数),所以没有必要用单引号将它括起来。

代码语言:javascript
运行
复制
$ cat data
123
241114
43243
35745
656
346   456


$echo delete FROM Recordtable WHERE DataID IN \(0$(cat data | tr -cs '[:digit:]' ',')0\)\;
delete FROM Recordtable WHERE DataID IN (0,123,241114,43243,35745,656,346,456,0);

在这里,0处理领先和落后的,

票数 2
EN

Stack Overflow用户

发布于 2012-02-29 06:19:05

您可以执行以下操作:

代码语言:javascript
运行
复制
echo $(cat file.csv)

代码语言:javascript
运行
复制
cat file.csv | xargs

或者最后:

代码语言:javascript
运行
复制
$ cat /tmp/l.csv
1;2;3;4;5;6
7;8;9;10;11
$ echo $(< /tmp/l.csv)
1;2;3;4;5;6 7;8;9;10;11
$ echo $(cat /tmp/l.csv) | perl -pe 's@(;|\n)@,@g'
1,2,3,4,5,6,7,8,9,10,11,
$ 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9490573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档