【问题标题】:BASH Script : Explode string and save to fileBASH 脚本:分解字符串并保存到文件
【发布时间】:2019-12-13 03:07:36
【问题描述】:

我需要一些帮助。我有这个

info.txt

[test.local]
user=test
group=test
;
[game.local]
user=game
group=game
;

这是我的目标,我希望将其与 ; 分开并将其放在文件名基于 [ ] 值的文件中p>

喜欢这个

test.local.txt

[test.local]
user=test
group=test

game.local.txt

[game.local]
user=game
group=game

我的代码目前是 files.sh

#!/bin/bash
value=$(<info.txt)

SAVEIFS=$IFS   
IFS=$';'     
val=($value) 
IFS=$SAVEIFS  

for (( i=0; i<${#val[@]}; i++ ))
do
  echo "${val[$i]}"
done

我只坚持使用数组,我该如何实现它。

【问题讨论】:

  • 您的具体问题是什么?您编写了哪些代码来实现这一目标?
  • @user1934428 嗨,先生,已经更新了。

标签: bash shell ubuntu awk command-line-interface


【解决方案1】:

你可以使用这个gnu-awk 命令:

awk -v RS=';\n' 'NF{f=$1; gsub(/[][]/, "", f); printf "%s", $0 > (f ".txt")}' info.txt

详情:

  • -v RS=';\n':将输入记录分隔符设置为;,后跟换行符
  • NF{...}: 只对非空行执行
  • f=$1:保存$1,即[...] 变量f 中的行
  • gsub(/[][]/, "", f):从变量 f 中删除 []
  • printf:将单个块重定向到使用值 f 和文本 ".txt" 创建的文件名

【讨论】:

  • 谢谢先生。这是有效的。你能给我详细介绍一下这个命令及其选项发生了什么吗?它是什么意思。
  • 对不起,我的意思是我在回答中添加了解释。
  • 先生。如何在创建的文件上添加路径
  • 是的,你可以添加。只需在重定向后的 f 之前添加它 >
  • 您好,先生。就是修改了[test.local]和[game.local]不会包含在txt文件中,其余的都一样。
【解决方案2】:

你可以使用

 fn=$(echo "${val[$i]}"|head -n 1| tr -d '[]').txt 

找到要创建的文件的名称和

 echo "${val[$i]}"|tail -n +2

生成文件的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多