Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
“bashshell”从文件中读取节_Bash - Fatal编程技术网

“bashshell”从文件中读取节

“bashshell”从文件中读取节,bash,Bash,我不熟悉bash脚本。对文本伴侣也很着迷。无论如何,我有一个txt文件,其中包含如下内容 Smith:David:111 Oak St.:Colorado Springs:CO:80901 Smith:Tina:111 Oak St.:Colorado Springs:CO:80901 Martin:Steve:2233 Cascade St.:Colorado Springs:CO:80907 我正在尝试创建一个程序,它将以以下格式读取并显示它 Jane Doe 5245 Anystreet

我不熟悉bash脚本。对文本伴侣也很着迷。无论如何,我有一个txt文件,其中包含如下内容

Smith:David:111 Oak St.:Colorado Springs:CO:80901
Smith:Tina:111 Oak St.:Colorado Springs:CO:80901
Martin:Steve:2233 Cascade St.:Colorado Springs:CO:80907
我正在尝试创建一个程序,它将以以下格式读取并显示它

Jane Doe
5245 Anystreet St.
Any City, State 22222

John Doe
2245 Anystreet St.
Any City, State 22222
我找不到关于使用什么命令以及如何使用这些命令的初学者友好文档。一些场景提供了非常深入的文档,但很难理解。我想实现sort命令并按zipcode对其进行排序,但我无法获得一个好的示例。有人能帮我解决这个问题或者帮我开始吗

--------------------更新进一步问题---------------

谢谢你的建议,它帮了大忙。我以几种不同的方式编写了这个程序,但是我有一些关于另一个学生做的一个例子的最后问题。他们的代码中的所有内容都不太清楚。我把我的问题当作评论


如果您可以使用awk,则任务很简单:

测试: 您可以在bash中使用数组并执行以下操作:

while IFS=: read -ra line; do 
  printf "%s %s\n%s\n%s, %s %s %s\n\n" "${line[1]}" "${line[0]}" "${line[2]}" "${line[3]}" "${line[4]}" "
${line[5]}"; 
done < file

如果您可以使用awk,则任务很简单:

测试: 您可以在bash中使用数组并执行以下操作:

while IFS=: read -ra line; do 
  printf "%s %s\n%s\n%s, %s %s %s\n\n" "${line[1]}" "${line[0]}" "${line[2]}" "${line[3]}" "${line[4]}" "
${line[5]}"; 
done < file

您可以将IFS设置为冒号,然后小心地利用它:

$ cat > xyz
Smith:David:111 Oak St.:Colorado Springs:CO:80901
Smith:Tina:111 Oak St.:Colorado Springs:CO:80901
Martin:Steve:2233 Cascade St.:Colorado Springs:CO:80907
$ while read line
> do (IFS=:
>     set -- $line
>     echo $2 $1
>     echo $3
>     echo $4, $5 $6
>     echo
>    )
> done < xyz
David Smith
111 Oak St.
Colorado Springs, CO 80901

Tina Smith
111 Oak St.
Colorado Springs, CO 80901

Steve Martin
2233 Cascade St.
Colorado Springs, CO 80907

$

子shell的使用是可选的,但这意味着主shell中的IFS不会改变,这通常是个好主意

您可以将IFS设置为冒号,然后小心地利用它:

$ cat > xyz
Smith:David:111 Oak St.:Colorado Springs:CO:80901
Smith:Tina:111 Oak St.:Colorado Springs:CO:80901
Martin:Steve:2233 Cascade St.:Colorado Springs:CO:80907
$ while read line
> do (IFS=:
>     set -- $line
>     echo $2 $1
>     echo $3
>     echo $4, $5 $6
>     echo
>    )
> done < xyz
David Smith
111 Oak St.
Colorado Springs, CO 80901

Tina Smith
111 Oak St.
Colorado Springs, CO 80901

Steve Martin
2233 Cascade St.
Colorado Springs, CO 80907

$
子shell的使用是可选的,但这意味着主shell中的IFS不会改变,这通常是个好主意

这是一个简单的例子:

cat file | sed -r 's/(.*):(.*):(.*):(.*):(.*):(.*)/\1 \2\n\3\n\4,\5 \6\n/'
这是一个简单的例子:

cat file | sed -r 's/(.*):(.*):(.*):(.*):(.*):(.*)/\1 \2\n\3\n\4,\5 \6\n/'

我们如何将科罗拉多泉地图绘制到任何城市D最好与输入和输出数据保持一致。我们如何将科罗拉多泉映射到任何城市最好与输入和输出数据保持一致。您可以避免使用cat,因为sed可以直接使用sed从文件中获取输入。。。确实如此。但是,如果可能的话,我总是使用,并且总是建议使用cat来导入命令。这样,文件名总是非常清晰,因此您可以轻松地更改它,而不是将其放在参数列表中的某个位置。此外,如果您需要在运行前对输入进行任何小的更改,例如sed,您可以更轻松地进行更改。您可以避免使用cat,因为sed可以直接使用sed从文件中获取输入。。。确实如此。但是,如果可能的话,我总是使用,并且总是建议使用cat来导入命令。这样,文件名总是非常清晰,因此您可以轻松地更改它,而不是将其放在参数列表中的某个位置。此外,如果您需要在运行前对输入进行任何小的更改,例如sed,您可以更轻松地进行更改。2美元1美元等到底是什么。。。命令说。很难理解语法。@ShaneYost awk所做的是将输入行分解为变量,这些变量可以通过使用$sigil和数字来引用。我们做到了-F:这告诉awk在以下位置断开线:$2指的是第二个词$第一个字等等。。。ORS是默认值为\n的awk内置变量。因此,我使用了它而不是\n。您能帮我解释一下我在上面附加的图片中添加的一些问题吗。这是另一个人做事方式的一个例子。我只是很难理解。那2美元1美元等到底是什么。。。命令说。很难理解语法。@ShaneYost awk所做的是将输入行分解为变量,这些变量可以通过使用$sigil和数字来引用。我们做到了-F:这告诉awk在以下位置断开线:$2指的是第二个词$第一个字等等。。。ORS是默认值为\n的awk内置变量。因此,我使用了它而不是\n。您能帮我解释一下我在上面附加的图片中添加的一些问题吗。这是另一个人做事方式的一个例子。我只是很难理解它。
cat file | sed -r 's/(.*):(.*):(.*):(.*):(.*):(.*)/\1 \2\n\3\n\4,\5 \6\n/'