我需要从文件之间结构不同的文本文件中提取信息。虽然这可以使用宏来完成,但由于文件是可变的,请按行号进行选择。并且行内间距并非对所有文件都成功。
我想知道是否有人可以告诉我是否有一种方法可以解析txt文件并按关键字搜索并提取关键字后的信息?例如,像流量:99.99,我想提取 99.99。另一个问题是,使用流量示例时,流量会在每个文件中出现多次。有没有办法别名/索引 Flow Rate: 以便我可以在第三次出现时进行选择?
欢迎任何提示或技巧。我知道如何在识别关键字时打印整行,但不知道如何处理多次出现,并且只选择关键字后面的数字:
all_data = readLines("Unit 5 2013.txt")
hours_of_operation <- grep("Annual Hours of Operation: ",all_data)
all_data[hours_of_operation]
[1] " Annual Hours of Operation: 8760.0 hours/yr"
Run Code Online (Sandbox Code Playgroud)
谢谢
J
我有一个数据框:
a = c(2, 3, 5, 4)
b = as.character(c("dogs are loving", "cats are the best", "we prefer cats", "dogs are sweet"))
df = data.frame(a, b)
print(df)
a b
2 dogs are loving
3 cats are the best
5 we prefer cats
4 dogs are sweet
Run Code Online (Sandbox Code Playgroud)
我想更改 df$b 使其变为:
a b
2 dogs are loving
3 cats
5 cats
4 dogs are sweet
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用 grepl 来查明字符单元格是否包含单词 cats...
grepl("cats", df$b, ignore.case=TRUE)
Run Code Online (Sandbox Code Playgroud)
...但我不知道如何使用它来将字符单元格更改为“猫”。
所有,
希望将变量从shell动作传递给oozie shell.我在我的脚本中运行这样的命令:
#!/bin/sh
evalDate="hive -e 'set hive.execution.engine=mr; select max(cast(create_date as int)) from db.table;'"
evalPartition=$(eval $evalBaais)
echo "evaldate=$evalPartition"
Run Code Online (Sandbox Code Playgroud)
诀窍是它是shell中的hive命令.
然后我运行它来获取它在oozie中:
${wf:actionData('getPartitions')['evaldate']}
Run Code Online (Sandbox Code Playgroud)
但它每次都是空白!我可以在我的shell中运行这些命令很好,它似乎工作,但oozie没有.同样,如果我在群集的其他框上运行命令,它们也可以正常运行.有任何想法吗?
在一段时间的读取循环中,我看到了这个变量扩展${line/device name:}.我已经尝试使用自己的输入文件运行脚本,它只打印出行.
你能告诉我扩展在做什么吗?
通常在移动文件时,我需要稍后相反.所以在我的.bashrc中我包含了这个工作代码:
rmv() {
mv $2/${1##*/} ${1%/*}
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道为什么我不能把它写成一个单一的班轮.这是我试过的:
rmv() {mv $2/${1##*/} ${1%/*}}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我会收到此错误:
-bash: .bashrc: line 1: syntax error near unexpected token `{mv'
Run Code Online (Sandbox Code Playgroud) 我有一个 shell 脚本 (.sh),在其中使用sed命令替换文件中的最后一个匹配字符(我已将命令放在下面)。
我应该如何替换命令以在批处理文件 (.bat) 中获得相同的功能而不添加任何包/插件(为了在 Windows 7 及更高版本中兼容)?
sed -i '$ s/,/;/g' abc.java
Run Code Online (Sandbox Code Playgroud) 我有 4 个文件要重命名:
./01:
I0010001 I0020001
./02:
I0010001 I0020001
Run Code Online (Sandbox Code Playgroud)
我想为.dcm每个文件添加辅助文件名,所以我尝试过:
$ mv \(*/*\) \1.dcm
mv: cannot stat '(*/*)': No such file or directory
$ mv \(./*/*\) \1.dcm
mv: cannot stat '(./*/*)': No such file or directory
$ mv \(./\*/\*\) \1.dcm
mv: cannot stat '(./*/*)': No such file or directory
$ mv "\(./*/*\)" "\1.dcm"
mv: cannot stat '\(./*/*\)': No such file or directory
$ mv 0\([1-2]\)/I00\([1-2\)]0001 0\1/I00\20001.dcm
mv: cannot stat '0([1-2])/I00([1-2)]0001': No such file or directory
$ mv "0\([1-2]\)/I00\([1-2\)]0001" …Run Code Online (Sandbox Code Playgroud) 我有两个想要 grep 的向量,但我想保留 grep 模式中的顺序。我使用循环解决它,尽管我想知道是否有其他(更好)的方法来做到这一点。
例如。
to_match <- c("KZB8","KBB9","KBC9","KZA9","KZB2","KZB5","KZB6")
vectorA <- c("RuL_KZA9","RuL_KZB9","RuL_KZA5","RuL_KZC6","RuL_KZB8")
Run Code Online (Sandbox Code Playgroud)
我是这样解决的:
matching <- c()
for (i in to_match){
t <- grep(i, vectorA, value = T)
matching <- c(matching,t)
}
> matching
[1] "RuL_KZB8" "RuL_KZA9"
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我在这里看到了很好的答案:grep using acharactervectorwithmultiplepatterns
但正如您将看到的问题:
grep(paste(to_match, collapse = "|"),vectorA, value = T)
[1] "RuL_KZA9" "RuL_KZB8"
Run Code Online (Sandbox Code Playgroud)
是根据 grep 找到的第一个元素而不是使用匹配向量对匹配进行排序。
预先感谢您对更高效的代码的想法。
尼科
所以我基本上是从文件中读取第一行,并且我希望修剪第一个和最后一个字符,但前提是它们等于某个字符。我希望从字符串中删除“{”和“}”,但前提是它们分别是第一个和最后一个字符。
输入:
{Some_random_data_here, {more data here}, test}
Run Code Online (Sandbox Code Playgroud)
输出:
Some_random_data, {more data here}, test
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的完整命令,它能够删除第一个命令,但不能删除最后一个命令。
$(head -n 1 "$filePath" | sed s/^{//;s/}$//)
Run Code Online (Sandbox Code Playgroud)