Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix:使用CLI格式化数据_Unix_Pipe_Command Line Interface - Fatal编程技术网

Unix:使用CLI格式化数据

Unix:使用CLI格式化数据,unix,pipe,command-line-interface,Unix,Pipe,Command Line Interface,我想要的是一种将一个程序的输出通过管道传输到另一个程序中的方法,该程序将把每一行格式化为一个MySQL插入。Unix是否提供了一种简单的方法来实现这一点?您应该在bash中查看printf命令 您应该在bash中查看printf命令 我发现这正是我所需要的 echo "something from file" | awk '{print "something left " $0 " something right" }' 我发现这正是我所需要的 echo "something from fil

我想要的是一种将一个程序的输出通过管道传输到另一个程序中的方法,该程序将把每一行格式化为一个MySQL插入。Unix是否提供了一种简单的方法来实现这一点?

您应该在bash中查看printf命令


您应该在bash中查看printf命令


我发现这正是我所需要的

echo "something from file" | awk '{print "something left " $0 " something right" }'

我发现这正是我所需要的

echo "something from file" | awk '{print "something left " $0 " something right" }'

你可以这样做:

echo "something" | while read line; do
  echo "INSERT INTO table VALUES($line);"
done > file

你可以这样做:

echo "something" | while read line; do
  echo "INSERT INTO table VALUES($line);"
done > file

针对您对古鲁巴兰答案的评论,并给出
printf
一些TLC:

$ printf "something left %s something right\n" $(cat test.txt)
something left Test something right
$

针对您对古鲁巴兰答案的评论,并给出
printf
一些TLC:

$ printf "something left %s something right\n" $(cat test.txt)
something left Test something right
$

正如你可能已经从其他答案中收集到的,有很多方法可以做到这一点。他们甚至没有涉及到sed、Perl、Python等等。关键问题是“每行数据中有多少个值”,以及如何正确地将这些信息呈现给MySQL。如果输入行的格式很好,以便数据可以随时显示,那么它可以简单到:

data-generator-script |
while read line
do
    echo "INSERT INTO Table VALUES($line);"
done
或:

另一方面,如果数据中有多个由空格分隔的值,字符串需要用引号括起来,那么生活就更混乱了:

data-generator-script |
awk '{printf("INSERT INTO Table(Col1, Col2, …, ColN) VALUES(%d, '%s', …, %d);\n", $1, $2, …, $N);}'

如果您必须在非空白字符上拆分,以允许多字字符串,那么您还必须处理更复杂的问题。如果它类似于管道,并且没有出现在数据中,那么您只需要将
-F'|'
添加到
awk
脚本中。如果数据是CSV格式的,您可以使用第一种技术,但是如果数据中有多行字符串,则需要一个完整的CSV解析器工具。

正如您可能从其他答案中收集到的,有很多方法可以做到这一点。他们甚至没有涉及到sed、Perl、Python等等。关键问题是“每行数据中有多少个值”,以及如何正确地将这些信息呈现给MySQL。如果输入行的格式很好,以便数据可以随时显示,那么它可以简单到:

data-generator-script |
while read line
do
    echo "INSERT INTO Table VALUES($line);"
done
或:

另一方面,如果数据中有多个由空格分隔的值,字符串需要用引号括起来,那么生活就更混乱了:

data-generator-script |
awk '{printf("INSERT INTO Table(Col1, Col2, …, ColN) VALUES(%d, '%s', …, %d);\n", $1, $2, …, $N);}'

如果您必须在非空白字符上拆分,以允许多字字符串,那么您还必须处理更复杂的问题。如果它类似于管道,并且没有出现在数据中,那么您只需要将
-F'|'
添加到
awk
脚本中。如果数据为CSV格式,则可以使用第一种技术,但如果数据中有多行字符串,你需要一个完整的CSV解析器工具。

我已经看到了这个页面,但是我不知道如何让Prtff接受输入并把它放在另一个String中看到这个页面,但是我不知道如何让Prttf接受输入并把它放在另一个字符串的中间。