【发布时间】:2017-11-07 09:36:09
【问题描述】:
我有一个这样的 .txt 文件:
'SMb_TSS0303' '171765' '171864' '-' 'NC_003078' 'SMb20154'
'SMb_TSS0302' '171758' '171857' '-' 'NC_003078' 'SMb20154'
我想提取以下作为参数:
-'SMb'
-'171765'
-'171864'
-'-'(减号)
-> 不需要引号
我正在尝试在 shell 脚本中执行此操作:
#!/bin/sh
file=$1
cat "$1"|while read line; do
echo "$line"
parent=$(awk {'print substr($line,$0,5)'})
echo "$parent"
done
echos 'SMb
据我所知,awk substr 的工作原理是这样的:
substr(s, a, b)=>returns b number of chars from string s, starting at position a
首先,我不明白,为什么我可以提取 0-5 的 'Smb,其次,我无法提取我需要的任何其他参数,因为移动 start 不起作用。 例如。 $1,6 给出空回声。我希望 Mb_TSS
期望的最终输出:
#!/bin/sh
file=$1
cat "$1"|while read line; do
parent=$(awk {'print substr($line,$0,5)'})
start=$(awk{'print subtrs($line,?,?')})
end=$(awk{'print subtrs($line,?,?')})
strand=$(awk{'print subtrs($line,?,?')})
done
echo "$parent" -> echos SMb
echo "$start" -> echos 171765
echo "$end" -> echos 171864
echo "$strand" -> echos -
我有一个假设,行中的项目被视为单个字符串或其他什么?也许我也错误地处理了文件解析,但我尝试的一切都不起作用。
【问题讨论】:
-
你应该edit你的问题删除不必要的部分并专注于你已经尝试过的内容、输入、输出和预期输出。 ATM 很不清楚
-
不过,我需要展示一下我是如何制作 .txt 文件的。也许,问题可以通过不同的方式来解决?我真的没有计划,我可以从哪里开始解决我的问题,但我会尽量让它更清楚
-
当你编辑你的问题时提醒我。
-
@Jean-FrançoisFabre 我仍然是 Stack Overflow 的“新手”,ping 是如何工作的?我希望用 @ 标记也能正常工作
-
但是所有这些变量都会被下一行覆盖,只输出最后一行的值,有什么好处?